import numpy as np
from hyperopt import fmin, tpe, hp, STATUS_OK
# 導入需要的庫和模型
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score
# 創建一個簡單的示例數據集
X, y = np.random.rand(100, 5), np.random.randint(0, 2, 100)
# 劃分訓練集和測試集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 定義超參數搜索空間
space = {
'C': hp.uniform('C', 0.1, 10),
'solver': hp.choice('solver', ['liblinear', 'newton-cg', 'sag', 'lbfgs'])
}
# 定義目標函數
def objective(params):
# 創建邏輯回歸模型
model = LogisticRegression(C=params['C'], solver=params['solver'], random_state=42)
# 在訓練集上訓練模型
model.fit(X_train, y_train)
# 在測試集上進行預測
y_pred = model.predict(X_test)
# 計算準確率
accuracy = accuracy_score(y_test, y_pred)
return {'loss': -accuracy, 'status': STATUS_OK}
# 使用TPE算法進行優化
best = fmin(fn=objective, space=space, algo=tpe.suggest, max_evals=100, verbose=0)
print(best)
在這個示例中,我們首先導入了所需的庫,包括 numpy、hyperopt 和需要用到的模型和評估指標。
然後,我們創建了一個簡單的示例數據集(X 和 y),並將其劃分為訓練集和測試集。
接著,我們定義了超參數的搜索空間,這里以邏輯回歸模型為例,我們選擇了正則化參數 C 和求解器 solver 作為超參數。
然後,我們定義了目標函數 objective,它將根據給定的超參數訓練邏輯回歸模型,並返回準確率的相反數(因為 HyperOpt 是一個最小化問題)。
最後,我們使用 TPE 算法進行了貝葉斯優化,設置了最大叠代次數為 100 次。
最終,輸出的 best 變量將包含了找到的最優超參數組合。這個例子中,我們使用了隨機生成的數據,實際應用中,你可以將數據和模型替換成你的實際情況。